<?php

App::uses('CakeEmail', 'Network/Email');
class ReservasController extends AppController {

    public $name = "Reservas";
    
    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('reserva');
    }

    public function reserva($residuo_id = null) {
        if ($this->request->is('get')) {
            $this->loadModel('Produto');
            $residuo = $this->Produto->read(null, $residuo_id);
            $this->set('residuo', $this->Produto->read(null, $residuo_id));
            $this->loadModel('Laboratorio');
            $this->set('laboratorio', $this->Laboratorio->read(null, $residuo['Produto']['laboratorio_id']));

            $values = $this->Auth->user();
            $user_lab = $this->Laboratorio->read(null, $values['laboratorio_id']);
            $values['centro'] = $user_lab['Laboratorio']['centro'];
            $values['sala'] = $user_lab['Laboratorio']['sala'];
            $this->set('values', $values);
        } else {
            debug($this->request->data);
            if ($this->request->data['Reserva']['quantidade'] <=
                    $this->request->data['quantidade_disponivel']) {
                if ($this->request->is('post')) {
                    $this->loadModel('ProdutoReserva');
                    $this->Reserva->create();
                    if ($this->Reserva->save($this->request->data)) {
                        $prod_res_data['ProdutoReserva']['produto_id'] = $this->request->data['produto_id'];
                        $prod_res_data['ProdutoReserva']['reserva_id'] = $this->Reserva->getInsertID();
                        debug($prod_res_data);
                        $this->ProdutoReserva->create();
                        if ($this->ProdutoReserva->save($prod_res_data)) {
                            $this->Session->setFlash(
                                    __('A sua solicitação de reserva foi enviada para o responsável. Você será alertado por email após análise.'), 'flash_alerta');
                            $this->redirect(array('controller' => 'produtos', 'action' => 'search'));
                        } else {
                            $this->Session->setFlash(__('Não foi possível realizar a reserva', 'flash_erro'));
                            $this->redirect(array('controller' => 'produtos', 'action' => 'search'));
                        }
                    } else {
                        $this->Session->setFlash(__('Não foi possível realizar a reserva', 'flash_erro'));
                        $this->redirect(array('controller' => 'produtos', 'action' => 'search'));
                    }
                }
            } else {
                $this->Session->setFlash(_('A quantidade solicitada é maior que a disponível'), 'flash_erro');
            }
        }
    }

    public function index() {
        $user = $this->Auth->user();
        
        if (!parent::isAuthorized($user)) { //funcionario
            $this->loadModel('ProdutoReserva');
            $this->set('reservas', $this->ProdutoReserva->find('all', array(
                        'fields' => array('reservas.*, produtos.quantidade'),
                        'joins' => array(
                            array(
                                'table' => 'reservas',
                                'alias' => 'reservas',
                                'type' => 'INNER',
                                'foreignKey' => 'reserva_id',
                                'conditions' => array(
                                    'reservas.id = ProdutoReserva.reserva_id')
                            ),
                            array(
                                'table' => 'produtos',
                                'alias' => 'produtos',
                                'type' => 'INNER',
                                'foreignKey' => 'produto_id',
                                'conditions' => array(
                                    'produtos.id = ProdutoReserva.produto_id')
                            ),
                            array(
                                'table' => 'usuarios',
                                'alias' => 'usuarios',
                                'type' => 'INNER',
//                                'foreignKey' => 'produto_',
                                'conditions' => array(
                                    'produtos.laboratorio_id = usuarios.laboratorio_id',
                                    'usuarios.id = ' . $user['id'] . '')
                            ),
                        ),
                        'conditions' => array('reservas.aprovada != 1')
            )));
        } else { //admin
            $this->loadModel('ProdutoReserva');
            $this->set('reservas', $this->ProdutoReserva->find('all', array(
                        'fields' => array('reservas.*, produtos.quantidade'),
                        'joins' => array(
                            array(
                                'table' => 'reservas',
                                'alias' => 'reservas',
                                'type' => 'INNER',
                                'foreignKey' => 'reserva_id',
                                'conditions' => array(
                                    'reservas.id = ProdutoReserva.reserva_id')
                            ),
                            array(
                                'table' => 'produtos',
                                'alias' => 'produtos',
                                'type' => 'INNER',
                                'foreignKey' => 'produto_id',
                                'conditions' => array(
                                    'produtos.id = ProdutoReserva.produto_id')
                            ),
                        ),
                        'conditions' => array('reservas.aprovada != 1')
            )));
            
        }
    }
    public function aceitar($reserva_id = NULL){
        $this->request->onlyAllow('post');
        $reserva = $this->Reserva->read(null, $reserva_id);
        
        $reserva['Reserva']['aprovada'] = '1';
        
        if($this->Reserva->save($reserva)){
//        debug($reserva);
        $this->loadModel('ProdutoReservas');
        $produto = $this->ProdutoReservas->find('first', array('conditions' => array('ProdutoReservas.reserva_id = \''.$reserva_id.'\'')));
        $this->loadModel('Produto');
        $residuo = $this->Produto->read(null, $produto['ProdutoReservas']['produto_id']);
//        debug($residuo);
        $nome_comercial = $residuo['Produto']['nome_comercial'];
//        $email = new CakeEmail();
//            $email->template('solicitacao_aceita', 'default')
//                    ->config('smtp')
//                    ->emailFormat('html')
//                    ->subject(__('Solicitação de reserva aceita - ' . Configure::read('Application.name')))
//                    ->to($reserva['Reserva']['email'])
//                    ->viewVars(array('residuo' => $nome_comercial))
//                    ->from('projetoincorpore@gmail.com')
//                    ->send();

            $this->Session->setFlash(__('Um email foi enviado para o requerente.'), 'flash_OK');
            $this->redirect('/reservas/index');
        }
        else{
            $this->Session->setFlash(__('Houve um erro no processo de aceitação. Tente novamente.'), 'flash_erro');
            
        }
        
    }

}

?>
